//#include "comm.h"
//
//int main()
//{
//	umask(0);
//
//	if(mkfifo(FILE_NAME, 0666) < 0)
//	{
//		perror("mkfifo");
//		return 1;
//	}
//
//	int fd = open(FILE_NAME, O_RDONLY);
//	if(fd < 0)
//	{
//		perror("open");
//		return 1;
//	}	
//
//	char msg[SIZE];
//
//	while(1)
//	{
//		msg[0] = '\0';//每次读之前将msg清空
//
//		ssize_t s = read(fd, msg, sizeof(msg)-1);
//		if(s > 0)
//		{
//			msg[s] = '\0';
//			printf("client: %s\n", msg);
//		}	
//		else if(s==0) //写端关闭，读端会读到0，即管道文件末尾，读端不会阻塞
//		{
//			printf("client quit!\n");
//			break; //退出循环
//		}
//		else
//		{
//			printf("client error!\n");
//			break;	
//		}
//	}
//	
//	close(fd);
//
//	return 0;
//}


#include "comm.h"

int main()
{
	umask(0);

	InIt init;

	int fd = open(FILE_NAME, O_RDONLY);
	if(fd < 0)
	{
		perror("comm.h::main::open");
		return 1;
	}	

	char msg[SIZE];

	while(1)
	{
		msg[0] = '\0'; //每次循环缓冲区清空
		ssize_t n = read(fd, msg, sizeof(msg) - 1);
		if(n > 0)
		{
			msg[n] = '\0';
			cout << "serve say@ ";
			//printf("serve say@ %s\n", msg);

			const char *label = "+-*/";
			char *p = msg;
			int flag = 0;

			while(*p)
			{
				switch(*p)
				{
					case '+':
						flag = 1;
						break;
					case '-': 
						flag = 2;
						break;
					case '*': 
						flag = 3;
						break;
					case '/': 
						flag = 4;
						break;
				}
				p++;
			}

			char* str1 = strtok(msg, "+-*/");
			char* str2 = strtok(NULL, "+-*/");
			int num1 = atoi(str1);
			int num2 = atoi(str2);
			int ret = 0;
			switch(flag)
			{
				case 1:
					ret = num1 + num2;
					break;
				case 2:
					ret = num1 - num2;
					break;
				case 3:
					ret = num1 * num2;
					break;
				case 4:
					ret = num1 / num2;
					break;
			}

			printf("%d %c %d = %d\n", num1, label[flag - 1], num2, ret);

		}
		else if (n == 0)
		{
			cout << "read quit " << endl; 
			break;
		}
		else
		{
			cout << "read assert " << endl;
			break;
 		}
		sleep(1);
	}
	
	close(fd);

	return 0;
}
